package BitCreekLib; /**
 * @author Ivan Litsvinenka & Emanuele Ricci
 * Interfaccia che rappresenta i servizi offerti dal Tracker verso i Peers
 *
 */

import java.net.InetAddress;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;

public interface IRMITracker extends Remote {

    /**
     * Ritorna le porte TCP e UDP che il Tracker ha associato ad un determinato torrent
     *
     * @param fileName Il nome del torrent
     * @return La coppia di porte TCP e UDP associate al torrent
     * @throws java.rmi.RemoteException
     */
    public Ports getTorrentPorts ( String fileName ) throws RemoteException;

    /**
     * Servizio offerto ai vari Peers per pubblicare un torrent
     *
     * @param firstSeeder     Indirizzo del primo seeder (il peer che pubblica il torrent)
     * @param firstSeederPort La porta del primo seeder ( a cui tutti gli altri si connetteranno )
     * @param tmi             Le MetaInfo relative al torrent da pubblicare
     * @param callbackClient  l'interfaccia del peer che ha pubblicato il torrent
     * @throws java.rmi.RemoteException
     */
    public void publishTorrent ( InetAddress firstSeeder, int firstSeederPort, MetaInfo tmi, IRMIPeer callbackClient ) throws RemoteException;

    /**
     * Servizio offerto ai vari Peers per ottenere il descrittore del torrent
     *
     * @param fileName Il nome del torrent da ottenere
     * @param myHost
     * @return Le informazioni relative al torrent per il download
     * @throws java.rmi.RemoteException
     */
    public MetaInfo getTorrent ( String fileName, Host myHost ) throws RemoteException;

    /**
     * Servizio offerto ai vari Peers per ricercare i torrent relativi alla keyphrase inviata
     *
     * @param fileName La frase da cui ottenere le parole chiave
     * @return Una lista di informazini relative ai torrent che combaciavano con i criteri di ricerca
     * @throws java.rmi.RemoteException
     */
    public ArrayList<MetaInfo> searchTorrent( String fileName ) throws RemoteException;


}
